package com.gym.myshop.services.impl;

import com.gym.myshop.dao.CartDao;
import com.gym.myshop.dao.ProductDao;
import com.gym.myshop.dao.impl.CartDaoImpl;
import com.gym.myshop.dao.impl.ProductDaoImpl;
import com.gym.myshop.entity.Cart;
import com.gym.myshop.entity.Product;
import com.gym.myshop.services.CartServices;
import com.gym.myshop.util.DBUtil;

import java.util.List;

/**
 * @author ming
 * 2021/11/6
 * description:购物车
 */
public class CartServicesImpl implements CartServices {

    private CartDao cd = new CartDaoImpl();

   /**
    *@author:ming
    *@Date: 2021/11/6
    *@description:添加商品进购物车
    */
    @Override
    public boolean createCart(int pid, int uid) {
        //1 判断用户是不是已经有这个商品的购物车数据存在
        try {
            DBUtil.begin();
            int i = 0;
            Cart c = cd.getCartByUidAndPid(uid, pid);
            if (c != null) {
                //2 如果有数据在原有的数据基础上数量+1
                //设置商品数据+1
                c.setCnum(c.getCnum() + 1);
                //重新计算商品小计的价格,使用商品单价*新的商品数量
                c.setCcount(c.getPro().getPprice() * c.getCnum());
                i = cd.updateCart(c.getCid(), c.getCnum(), c.getCcount());
            } else {
                //3 如果没有数据就直接新增1条购物车数据,数量默认为1
                Cart cart = new Cart();
                //访问productDao,来进行商品查询
                ProductDao pd = new ProductDaoImpl();
                Product pro = pd.getProById(pid);
                cart.setPid(pro.getPid());
                cart.setCnum(1);
                // 第一次加入该商品,商品单价就是小计价格
                cart.setCcount(pro.getPprice());
                cart.setUid(uid);
                //调用Dao
                i = cd.addCart(cart);
            }
            DBUtil.commit();
            if (i > 0) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            DBUtil.rollback();
        }
        return false;
    }

    /**
     *@author:ming
     *@Date: 2021/11/6
     *@description:查看购物车
     */
    @Override
    public List<Cart> getCarList(int uid) {
        return cd.getCarList(uid);
    }

    /**
     *@author:ming
     *@Date: 2021/11/6
     *@description:删除，清空购物车
     */
    @Override
    public boolean delCart(int uid, Integer pid) {
        try {
            DBUtil.begin();
            int i = 0;
            //如果 pid的值为0即为要清空购物车
            if (pid == 0) {
                //清空购物车
                i = cd.clearCart(uid);
            } else {
                //删除单个商品
                i = cd.delCart(uid, pid);
            }
            DBUtil.commit();
            if (i>0) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            DBUtil.rollback();
        }
        return false;
    }

    /**
     *@author:ming
     *@Date: 2021/11/6
     *@description:修改商品数量
     */
    @Override
    public boolean updateCart(int uid, Integer pid, Integer num) {
        try {
            DBUtil.begin();
            int i =0;
            if (num==0) {
                //如果num是0就删除该购物车数据
                i = cd.delCart(uid, pid);
            }else{
                //如果不是0就执行update,pid uid查询对应的购物车数据
                Cart cart = cd.getCartByUidAndPid(uid, pid);
                // num==1 数量+1,num==-1  数量-1 加减商品数量
                cart.setCnum(cart.getCnum()+num);
                // 重新设置购物车数据的小计价格==>商品单价*商品数量
                cart.setCcount(cart.getCnum()* cart.getPro().getPprice());
                //修改数据
                i= cd.updateCart(cart.getCid(), cart.getCnum(), cart.getCcount());
            }
            DBUtil.commit();
            if (i>0) {
                return true;
            }
        } catch (Exception e) {
            e.printStackTrace();
            DBUtil.rollback();
        }
        return false;
    }
}
